import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from pprint import pprint

class TestCase:
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('http://www.baidu.com')

    def id(self):
        # 通过id定位元素
        # webelement 就是所有通过selenium 方法获取的标签属性
        # webelement.get_attribute(param) 获取标签的属性
        # param: outerHTML 获取标签的源代码
        kw = self.driver.find_element(By.ID, 'kw')
        print(kw.get_attribute('outerHTML'))

        su = self.driver.find_element(By.ID, 'su')
        print(su.get_attribute('outerHTML'))

    def class_name(self):
        # 通过标签的class属性定位元素 By.CLASS_NAME
        kw = self.driver.find_element(By.CLASS_NAME, 's_ipt')
        print(kw.get_attribute('outerHTML'))

    def link_text(self):
        # 通过链接文本定位元素
        news = self.driver.find_element(By.LINK_TEXT, '新闻')
        print(news.get_attribute('outerHTML'))

    def partial_link_text(self):
        # 通过部分链接文本定位元素
        hao123 = self.driver.find_element(By.PARTIAL_LINK_TEXT, 'hao')
        print(hao123.get_attribute('outerHTML'))

    def tag_name(self):
        # 通过标签名定位元素
        # driver.find_element()
        ipt = self.driver.find_element(By.TAG_NAME, 'input') #定位页面第一个input标签
        print(ipt.get_attribute('outerHTML'))

        # driver.find_elements()
        ipts = self.driver.find_elements(By.TAG_NAME, 'input')  # 定位页面所有input标签list[]
        pprint(ipts)
        print(len(ipts))
        print(ipts[7].get_attribute('outerHTML'))

    def name(self):
        # 通过name属性定位元素
        ie = self.driver.find_element(By.NAME, 'ie')
        print(ie.get_attribute('outerHTML'))

    def about_error(self):
        # driver.find_element() 匹配不到抛出异常
        # self.driver.find_element(By.ID, 'abc) #selenium.common.exceptions.NoSuchElementException

        self.driver.find_element(By.CLASS_NAME, 'aaaaa')

    def quit(self):
        time.sleep(2)
        self.driver.quit()

if __name__ == '__main__':
    case = TestCase()
    case.id()
    case.class_name()
    case.link_text()
    case.partial_link_text()
    case.tag_name()
    case.name()
    # case.about_error()
    case.quit()